package com.github.simonpercic.oklog; import com.github.simonpercic.oklog.core.BaseLogDataInterceptor; import com.squareup.okhttp.Connection; import com.squareup.okhttp.Headers; import com.squareup.okhttp.Interceptor.Chain; import com.squareup.okhttp.MediaType; import com.squareup.okhttp.Protocol; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import com.squareup.okhttp.internal.http.HttpEngine; import java.io.IOException; import java.nio.charset.Charset; import okio.Buffer; import okio.BufferedSource; /** * Log data interceptor util. Inspired by: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor. * * @author Simon Percic <a href="https://github.com/simonpercic">https://github.com/simonpercic</a> */ class LogDataInterceptor extends BaseLogDataInterceptor<Chain, Request, Response, Headers, MediaType> { @Override protected Request request(Chain chain) { return chain.request(); } @Override protected String protocol(Chain chain) { Connection connection = chain.connection(); Protocol protocol = connection != null ? connection.getProtocol() : Protocol.HTTP_1_1; return protocol.toString(); } @Override protected String requestMethod(Request request) { return request.method(); } @Override protected String requestUrl(Request request) { return request.httpUrl().toString(); } @Override protected String requestUrlPath(Request request) { return request.httpUrl().encodedPath(); } @Override protected String responseUrl(Response response) { return response.request().httpUrl().toString(); } @Override protected Headers requestHeaders(Request request) { return request.headers(); } @Override protected Headers responseHeaders(Response response) { return response.headers(); } @Override protected int headersCount(Headers headers) { return headers.size(); } @Override protected String headerName(Headers headers, int index) { return headers.name(index); } @Override protected String headerValue(Headers headers, int index) { return headers.value(index); } @Override protected String headerValue(Headers headers, String name) { return headers.get(name); } @Override protected boolean hasRequestBody(Request request) { return request.body() != null; } @Override protected boolean hasResponseBody(Response response) { return HttpEngine.hasBody(response); } @Override protected int responseCode(Response response) { return response.code(); } @Override protected String responseMessage(Response response) { return response.message(); } @Override protected long requestContentLength(Request request) throws IOException { return request.body().contentLength(); } @Override protected long responseContentLength(Response response) throws IOException { return response.body().contentLength(); } @Override protected MediaType requestContentType(Request request) { return request.body().contentType(); } @Override protected MediaType responseContentType(Response response) { return response.body().contentType(); } @Override protected String contentTypeString(MediaType mediaType) { return mediaType.toString(); } @Override protected Charset contentTypeCharset(MediaType mediaType, Charset charset) { return mediaType.charset(charset); } @Override protected void writeRequestBody(Request request, Buffer buffer) throws IOException { request.body().writeTo(buffer); } @Override protected BufferedSource responseBodySource(Response response) throws IOException { return response.body().source(); } }